package com.nbgroup.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nbgroup.pojo.DictData;
import com.nbgroup.mapper.DictDataMapper;
import com.nbgroup.pojo.common.PageBean;
import com.nbgroup.pojo.dto.DictDataDTO;
import com.nbgroup.pojo.dto.DictDataPageQueryDTO;
import com.nbgroup.pojo.vo.DictDataVO;
import com.nbgroup.service.IDictDataService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author author
 * @since 2024-10-26
 */
@Service
@Slf4j
public class DictDataServiceImpl extends ServiceImpl<DictDataMapper, DictData> implements IDictDataService {

    /**
     * 字典数据分页查询
     * @param dto
     * @return
     */
    @Override
    public PageBean pageQuery(DictDataPageQueryDTO dto) {
        dto.check();
        Page<DictData> page = new Page<>(dto.getPageNum(),dto.getPageSize());
        Page<DictData> p = lambdaQuery().eq(dto.getDictType() != null,DictData::getDictType, dto.getDictType())
                .like(dto.getDictLabel() != null,DictData::getDictLabel, dto.getDictLabel())
                .eq(dto.getStatus() != null,DictData::getStatus, dto.getStatus()).page(page);
        List<DictData> records = p.getRecords();
        ArrayList<DictDataVO> dictDataVOS = new ArrayList<>();
        records.forEach(record ->{
            DictDataVO dIctDataVO = BeanUtil.copyProperties(record, DictDataVO.class);
            if (record.getIsDefaulty() == 0){
                dIctDataVO.setIsDefault("N");
                dIctDataVO.setDefaultValue(false);
            }else {
                dIctDataVO.setIsDefault("Y");
                dIctDataVO.setDefaultValue(true);
            }
            dictDataVOS.add(dIctDataVO);
        });
        PageBean pageBean = PageBean.builder().rows(dictDataVOS).total(p.getTotal()).build();
        return pageBean;
    }

    /**
     * 修改字典数据
     * @param dto
     */
    @Override
    public void updateData(DictDataDTO dto) {
        //判断字典数据是否为默认
        if ("Y".equals(dto.getIsDefault())){
            //该字典数据修改为默认值,先将所有的字典数据修改为非默认
            lambdaUpdate().set(DictData::getIsDefault,0).update();
            //将当前id字典数据修改为默认
            lambdaUpdate().set(DictData::getIsDefault,1).eq(DictData::getDictCode,dto.getDictCode()).update();
        }
        DictData dictData = BeanUtil.copyProperties(dto, DictData.class);
        dictData.setIsDefault(null);
        lambdaUpdate().eq(DictData::getDictCode,dictData.getDictCode()).update(dictData);
    }
}
